package com.hm.manage.utils;



import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Slf4j
@Component
public class FTPFileService {

//    public static void main(String[] args) {
//        String server = "2.57.22.2"; // FTP服务器地址
//        int port = 11121; // FTP端口，默认21
//        String user = "zwwftp1"; // 用户名
//        String password = "zwwftp1"; // 密码
//        String dirPath = "/ftp1"; // 目标目录路径
//
//        FTPClient ftpClient = new FTPClient();
//
//        try {
//            // 连接并登录
//            ftpClient.connect(server, port);
//            if (!ftpClient.login(user, password)) {
//                System.err.println("登录失败，请检查用户名和密码。");
//                return;
//            }
//
//            // 设置为被动模式（重要，避免列表获取失败）
//            ftpClient.enterLocalPassiveMode();
//
//            // 切换目录
//            if (!ftpClient.changeWorkingDirectory(dirPath)) {
//                System.err.println("目录不存在或无法访问: " + dirPath);
//                return;
//            }
//
//            // 获取文件列表
//            FTPFile[] files = ftpClient.listFiles();
//
//            // 统计文件数量（排除目录）
//            int fileCount = 0;
//            for (FTPFile file : files) {
//                if (file.isFile()) {
//                    fileCount++;
//                }
//            }
//
//            System.out.println("目录 '" + dirPath + "' 中的文件数量为: " + fileCount);
//
//        } catch (IOException e) {
//            System.err.println("连接FTP服务器时发生错误: " + e.getMessage());
//            e.printStackTrace();
//        } finally {
//            // 断开连接
//            try {
//                if (ftpClient.isConnected()) {
//                    ftpClient.logout();
//                    ftpClient.disconnect();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//    }

    public Integer getFileCount(String server, int port, String user, String password, String dirPath) {
        FTPClient ftpClient = new FTPClient();
        int fileCount = 0;

        // 超时设置（单位：毫秒）
        int connectTimeout = 10000;    // 连接超时 10秒
        int dataTimeout = 30000;       // 数据传输超时 30秒
        int defaultTimeout = 60000;    // 默认超时 60秒
        try {
            // 设置超时参数（必须在connect之前设置）
            ftpClient.setConnectTimeout(connectTimeout);
            ftpClient.setDataTimeout(dataTimeout);
            ftpClient.setDefaultTimeout(defaultTimeout);

            // 连接并登录
            ftpClient.connect(server, port);
            if (!ftpClient.login(user, password)) {
                log.error("登录失败，请检查用户名和密码。");
                return fileCount;
            }

            // 设置为被动模式（重要，避免列表获取失败）
            ftpClient.enterLocalPassiveMode();

            // 切换目录
            if (!ftpClient.changeWorkingDirectory(dirPath)) {
                log.error("目录不存在或无法访问: " + dirPath);
                return fileCount;
            }

            // 获取文件列表
            FTPFile[] files = ftpClient.listFiles();

            // 统计文件数量（排除目录）

            for (FTPFile file : files) {
                if (file.isFile()) {
                    fileCount++;
                }
            }

            log.info("目录 '" + dirPath + "' 中的文件数量为: " + fileCount);
            return fileCount;

        } catch (IOException e) {
            // 处理超时异常
            if (e.getMessage().contains("timed out")) {
                log.error("操作超时: " + e.getMessage());
            } else {
                log.error("连接FTP服务器时发生错误: " + e.getMessage());
            }
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException e) {
                log.error("断开连接时发生异常: " + e.getMessage());
            }
        }
        return fileCount;
    }



}
